/*******************************************************************************

        copyright:      Copyright (c) 2004 Kris Bell. All rights reserved

        license:        BSD style: $(LICENSE)
      
        version:        Initial release: May 2004
        
        author:         Kris

*******************************************************************************/

module tango.util.log.model.ILogger;

/*******************************************************************************

*******************************************************************************/

interface ILogger
{
        enum Level {Trace=0, Info, Warn, Error, Fatal, None};

        /***********************************************************************
        
                Is this logger enabed for the specified Level?

        ***********************************************************************/

        @property bool enabled (Level level = Level.Fatal);

        /***********************************************************************

                Append a trace message

        ***********************************************************************/

        void trace (const(char[]) fmt, ...);

        /***********************************************************************

                Append an info message

        ***********************************************************************/

        void info (const(char[]) fmt, ...);
        
        /***********************************************************************

                Append a warning message

        ***********************************************************************/

        void warn (const(char[]) fmt, ...);

        /***********************************************************************

                Append an error message

        ***********************************************************************/

        void error (const(char[]) fmt, ...);

        /***********************************************************************

                Append a fatal message

        ***********************************************************************/

        void fatal (const(char[]) fmt, ...);

        /***********************************************************************

                Return the name of this ILogger (sans the appended dot).
       
        ***********************************************************************/

        @property const(char)[] name ();

        /***********************************************************************
        
                Return the Level this logger is set to

        ***********************************************************************/

        @property Level level ();

        /***********************************************************************
        
                Set the current level for this logger (and only this logger).

        ***********************************************************************/

        @property ILogger level (Level l);

        /***********************************************************************
        
                Is this logger additive? That is, should we walk ancestors
                looking for more appenders?

        ***********************************************************************/

        @property bool additive ();

        /***********************************************************************
        
                Set the additive status of this logger. See isAdditive().

        ***********************************************************************/

        @property ILogger additive (bool enabled);

        /***********************************************************************
        
                Send a message to this logger via its appender list.

        ***********************************************************************/

        ILogger append (Level level, lazy const(char[]) exp);
}
